/**
 * @author Laboratio Av I
 * @since 18/04/2012 14:03:56
 */
package ar.edu.utn.frgp.banco.service.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import ar.edu.utn.frgp.banco.dao.ClienteDao;
import ar.edu.utn.frgp.banco.dao.impl.ClienteDaoImpl;
import ar.edu.utn.frgp.banco.domain.Cliente;

import ar.edu.utn.frgp.banco.exceptions.DataAccessException;
import ar.edu.utn.frgp.banco.exceptions.ServiceException;
import ar.edu.utn.frgp.banco.service.RecursoServiceCliente;

public class RecursoServiceClienteImpl implements RecursoServiceCliente {

	private ClienteDao clienteDao;
	
	

	public RecursoServiceClienteImpl() { 
		setClienteDao(new ClienteDaoImpl());
		
	}
	
	public ClienteDao getClienteDao() {
		return clienteDao;
	}


	public void setClienteDao(ClienteDao clienteDao) {
		this.clienteDao = clienteDao;
	}


	private boolean existeCliente(Cliente cliente) {
		try {
			Cliente cl = new Cliente(); 
			cl=clienteDao.obtenerCliente(cliente.getDni());
			
			if (cl == null)
			{return true;}
			else
			{return false;}			
		} catch (DataAccessException e) {
			return false;
		}		
	}
	
	
	
		
	public void crearCliente(Cliente cliente) throws ServiceException {
		
		if (cliente != null) {			
			if (existeCliente(cliente)) {
				try {
					clienteDao.altaCliente(cliente);
				} catch (DataAccessException e) {
					throw new ServiceException("Error de acceso a BD."
							+ e.getMessage());
				}
			} else {
				throw new ServiceException("El cliente ya existe");
			}		                                 
		} else {
			throw new ServiceException("El objeto cliente es null");
		}
	}

	public List<Cliente> listarTodo() throws ServiceException {
		List<Cliente> clientes = new ArrayList<Cliente>();
		try {
			
			clientes = clienteDao.traerTodo();
			
			
		} catch (DataAccessException e) {
			throw new ServiceException("Error de acceso a BD." + e.getMessage());
			}
		return clientes;
	}
	@Override
	
	
	
	public List<Cliente>  listarClientesActivos() throws ServiceException {
		
		List<Cliente> clientes = new ArrayList<Cliente>();
		
		try {
			clientes =clienteDao.traerActivos();
			
		} catch (DataAccessException e) {
			throw new ServiceException("Error de acceso a BD." + e.getMessage());
		}
		
		return clientes;
		
	}
	public void dasactivarCliente(Cliente cl) throws ServiceException{
		Integer  operacion ;
		Scanner B = new Scanner(System.in);
		
	System.out.println("buscando Cliente ...");
	if (!existeCliente(cl)) {
		try {
			System.out.println("Esta seguro desea dar de baja este cliente?" );
			System.out.println("1-Si / 2-No" );
			operacion = B.nextInt();
				if (operacion == 1){
				clienteDao.bajarCliente(cl);
				}
				else
				{
					System.out.println("no se dio de baja el cliente");
				}
			}
		  catch (DataAccessException e) {
			throw new ServiceException("Error de acceso a BD." + e.getMessage());
		  	}
	} else {
		throw new ServiceException("El cliente no existe");
		}
	}
	@Override
	public void ActivarCliente(Cliente cl) throws ServiceException {
		
		Integer  operacion ;
		Scanner B = new Scanner(System.in);
		
	System.out.println("buscando Cliente ...");
	if (!existeCliente(cl)) {
		try {
			System.out.println("Esta seguro desea levantar este cliente?" );
			System.out.println("1-Si / 2-No" );
			operacion = B.nextInt();
				if (operacion == 1){
				clienteDao.levantarCliente(cl);
				}
				else
				{
					System.out.println("no se levanto el cliente");
				}
			}
		  catch (DataAccessException e) {
			throw new ServiceException("Error de acceso a BD." + e.getMessage());
		  	}
	} else {
		throw new ServiceException("El cliente no existe");
		}	
		
	}
	@Override
	public void modificarCliente(Cliente cl) throws ServiceException {
		Integer  operacion ;
		Scanner B = new Scanner(System.in);
		
	System.out.println("buscando Cliente ...");
	if (!existeCliente(cl)) {
		try {
			System.out.println("Esta seguro desea modificar este cliente?" );
			System.out.println("1-Si / 2-No" );
			operacion = B.nextInt();
				if (operacion == 1){
				clienteDao.actualizarCliente(cl);
				}
				else
				{
					System.out.println("no se modifico el cliente");
				}
			}
		  catch (DataAccessException e) {
			throw new ServiceException("Error de acceso a BD." + e.getMessage());
		  	}
	} else {
		throw new ServiceException("El cliente no existe");
		}	
		
	}

	public Cliente existeClienteTraer(Cliente cl) throws ServiceException {
		Cliente cliente = new Cliente();
		try {
			
			cliente = clienteDao.obtenerCliente(cl.getDni());
			
			
		} catch (DataAccessException e) {
			throw new ServiceException("Error de acceso a BD." + e.getMessage());
			}
		return cliente;
	}
	
	@Override
	public Cliente listarClientesActivosPorDni(int dnicliente)throws ServiceException {
		
		Cliente cliente = new Cliente();
		
		try {
			cliente = clienteDao.obtenerCliente(dnicliente);
		} catch (DataAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return cliente;
		
	}
		
}
